from django.shortcuts import render, redirect
from django.urls import reverse
from django.views import View
from apps.wards.models import Ward


def ward_list(request):
    """
    列表视图(列表展示功能)
    实现步骤：
    1.设置视图、模板和配置路由
    2.给模板引入表格和修改title
    3.在视图中取出数据库数据并传递给视图(context方法传递，模板中{}进行接收)
    4.模板中接收数据，并使用for循环把数据填充在模板中
    5.模板中的序号取值,使用for的自身机制，每次for循环都会存在forloop，其中counter代表从1开始，counter0代表从0开始
    """
    # 1.数据库中查询所有的项目数据
    objs = Ward.objects.all()
    # 使用django中反向解析获取添加项目的视图地址，并返回给模板
    create_url = reverse('wards:ward_list')
    return render(request, 'pmcs/all-wards.html', context={'objs': objs, 'create_url': create_url})


class WardsCreateView(View):
    """病区添加功能"""

    def get(self, request):
        """
        项目添加页面
        实现步骤：
        1.创建添加项目的视图类
        2.创建新增项目的模板
        3.在模板中。引入表单控件
        4.配置路由
        5.在list视图中，使用反向解析获取添加项目的视图方法的地址，并返回给list模板并配置跳转的路径，实现动态路由
            反向解析方法：
                1.django:reverse('projects:create')
                2.模板中:{{ create_url }}
        6.deatil模板中修改 模板字段，并设置表单提交方法为post
        """
        return render(request, 'pmcs/new-ward.html')

    def post(self, request):
        """
        项目添加
        实现步骤：
        1.编辑页面点击提交进入该方法
        2.接收表单参数
        3.获取对应数据库的数据，进行修改并保存
        4.返回到列表页面
        """
        # 1.接受表单数据
        # 2.创建模型对象并保存到数据库
        obj = Ward()
        obj.id = request.POST.get('id')
        obj.name = request.POST.get('name')
        obj.desc = request.POST.get('desc')
        obj.signature = request.POST.get('signature')
        obj.save()
        # 3.跳转到项目列表页面
        return redirect(reverse('wards:ward_list'))
